Temperature Impacts on Size Structure of Northeast US Groundfish Community Extend Issues from Fisheries Over-Exploitation

Size Spectrum Analysis of the Northeast US Groundfish Community

Author
Affiliation

Gulf of Maine Research Institute

Published

September 8, 2022

Code
####  Packages  ####
library(targets)
library(rnaturalearth)
library(here)
library(sf)
library(gmRi)
library(patchwork)
library(gt)
library(knitr)
library(tidyverse)
library(ggstream)
library(ggforce)
library(bcp)
library(scales)
library(corrplot)
library(readxl)


# Support functions
source(here("R/support/sizeSpectra_support.R"))

# Set theme
theme_set(theme_gmri())

# Map polygons
us_poly <- ne_states("united states of america", returnclass = "sf")
canada <- ne_states("canada", returnclass = "sf")


# Function to process summaries for various factor combinations
get_group_summaries <- function(...){
  
  # Do some grouping to get totals
  group_totals <- nefsc_size_bins %>% 
    group_by(...) %>% 
    summarise(total_survey_catch = sum(numlen, na.rm = T),
              total_lw_bio = sum(sum_weight_kg, na.rm = T),
              total_strat_abund = sum(strat_total_abund_s, na.rm = T),
              total_strat_lw_bio = sum(strat_total_lwbio_s, na.rm = T), 
              .groups = "drop") 
  
  # length bins
  group_lengths <- nefsc_size_bins %>% 
    group_by(..., length_bin) %>% 
    summarise(lenbin_survey_catch = sum(numlen),
              lenbin_lw_bio       = sum(sum_weight_kg),
              lenbin_strat_abund  = sum(strat_total_abund_s),
              lenbin_strat_lw_bio = sum(strat_total_lwbio_s), 
              .groups = "drop") %>% 
    left_join(group_totals) %>% 
    mutate(
      perc_total_catch  = (lenbin_survey_catch - total_survey_catch) * 100,
      perc_lw_bio       = (lenbin_lw_bio - total_lw_bio) * 100,
      perc_strat_abund  = (lenbin_strat_abund - total_strat_abund) * 100,
      perc_strat_lw_bio = (lenbin_strat_lw_bio - total_strat_lw_bio) * 100)
  
  # weight bins
  group_weights <- nefsc_size_bins %>% 
    group_by(..., weight_bin) %>% 
    summarise(wtbin_survey_catch = sum(numlen),
              wtbin_lw_bio       = sum(sum_weight_kg),
              wtbin_strat_abund  = sum(strat_total_abund_s),
              wtbin_strat_lw_bio = sum(strat_total_lwbio_s),
              .groups = "drop") %>% 
    left_join(group_totals) %>% 
    mutate(
      perc_total_catch  = (wtbin_survey_catch / total_survey_catch) * 100,
      perc_lw_bio       = (wtbin_lw_bio / total_lw_bio) * 100,
      perc_strat_abund  = (wtbin_strat_abund / total_strat_abund) * 100,
      perc_strat_lw_bio = (wtbin_strat_lw_bio / total_strat_lw_bio) * 100)

return(list("length_bins" = drop_na(group_lengths),
            "weight_bins" = drop_na(group_weights)))
}

Abstract

The Northwest Atlantic ocean bordering the United states and Scotian Shelf is one of the fastest warming locations on Earth. Research on the impacts of this rapid-warming has primarily focused on high-profile and/or upper trophic level species. Here we investigate an the ecosystem wide impacts by integrating community size structure changes using size spectrum analysis. While laboratory studies and ecological theory suggest that ectotherms raised at higher temperatures will reach smaller body-sizes at comparable development stages, it is unclear whether that relationship can be mitigated against across a diverse community through collective individual behaviors. In cases where communities fails to mitigate/adapt to elevated temperatures, we anticipate a steepening of the body-size spectrum slope relating to a reduction in larger sized individuals and an increase in smaller sized individuals within that community. Using groundfish abundance data from fisheries independent surveys we estimated size spectrum indices for four regions along the US NE continental shelf. At the regional scale we found that declines in the size spectrum slopes occurred the strongest in the Gulf of Maine and Georges Bank regions. Regions possessing the coldest temperatures and the largest populations of commercially targeted groundfish species. The largest declines in size spectrum slope occurred earlier in these areas than the more-recent temperature trends, suggesting other external forces may have driven the decline in larger-sized individuals within the communities. While the primary pressure of fisheries exploitation has declined over time, recovery in terms of larger-bodied individuals remains threatened by elevated temperatures.

Introduction

Temperature & Ecology

It is well understood that temperature plays a critical role on physiology through its impact on the chemical reactions that underpin biological life. A consequence of this, is that most life has evolved a thermal preference, around which the chemical reactions that support things like growth and means for self-preservation. Species that are unable to maintain their optimal thermal preferences internally (ectotherms), must be able to follow their thermal preferences through locomotion or adapt through changes in behavior. Otherwise; there will be physiological and/or metabolic costs in failing to do so.

In an era of anthropogenic climate change, there is an expectation that many species will be displaced from historic habitats. Research in marine environments has shown examples of species shifting to higher latitudes and deeper depths in the pursuit of more favorable conditions (Kleisner et al. 2017; Pinsky et al. 2013). Other research has suggested that the impacts of elevated temperatures may be manifesting not through geographic distribution change, but through physiological changes, changes in seasonal phenology, or hampered recovery efforts (Daan et al. 2005; Miller, O’Brien, and Fratantoni 2018; A. Pershing et al. 2018; University of South Carolina et al. 2021). Temperature has direct and indirect impacts on critical biological functions including the acquisition of biomass through feeding, the rates of biomass loss through metabolism, and the rates at which individuals mature and develop. This potential for temperature to impact the size structure of an ecosystem has implications for blue economy & natural resource systems we rely upon.

Size Spectrum Theory

Size is a defining characteristic of species that mediates many ecological interactions. Size impacts the mobility of an organism, its ability to evade predation, its ability to successfully prey on other organisms, and the metabolic costs associated with each of these behaviors. In the context of a strongly size-structured ecosystem, growth and maturity changes alter fitness and ultimately determine whether a species is successful in the given environment. Size structured environments are a fundamental organizational pattern that has been heavily researched. Ecological theory is rich with models relating how energy transfers from smaller prey species to larger predatory trophic levels, the allocation of energy for growth, and the trade offs of allocating energy towards reproduction at the expense of growth. One such ecological model that avoids the need for explicit articulation of each predator-prey interaction is the size spectrum model.

A “size spectrum” describes the distribution of biomass or abundance as a function of individuals’ mass or size on a log–log scale (Guiet, Poggiale, and Maury 2016). Size spectrum are described by two terms, the size spectrum slope & intercept. These two terms convey the baseline productivity, and how energy flows through an ecosystem in the form of biomass. The spectrum intercept value captures the richness or the productivity at the base of the community and is strongly connected to the prevailing environmental conditions (Boudreau and Dickie 1992). So much so, that spectrum shape is sometimes defined by its eutrophic or oligotrophic environmental conditions (Rossberg 2012).

Size spectra condense the complexities of predator prey networks and their interactions into a handful of size-based indices (SBI). In doing so a community size spectrum captures the emergent properties of a system, while needing only size and abundance information that is commonly available. For this reason it has become increasingly relied upon as an indicator of ecosystem health in the push for ecosystem based fisheries management. Changes in slope have been associated with fishing exploitation, primarily through the targeted removal of larger individuals (Bianchi et al. 2000; Shin et al. 2005). Numerical experiments have also tried to link changes in slope to environmental disturbances (Guiet, Poggiale, and Maury 2016). Biomass spectrum present predictable intercepts between ecosystems of similar productivity levels, but also of distinct temperatures (Guiet, Poggiale, and Maury 2016).

This is a direct quote from (Guiet, Poggiale, and Maury 2016), but nails the connection back to temp expectations:

Because it controls chemical reactions, temperature controls metabolic rates which underpin maintenance, growth or reproduction (Clarke and Johnston, 1999; Kooijman, 2010) as well as the functional responses to food density (Rall et al., 2012). Guiet et al. (2016)… In addition to the impact of temperature on communities’ intercepts (heights), the impact of temperature on the speed of the energy flow within communities may affect other properties, such as their resilience to perturbations or the intensity of trophic cascades (Andersen and Pedersen, 2009).

Temperature of the Gulf of Maine & NE Shelf

Sea surface temperatures in the Gulf of Maine since 1982 have been warming at rates faster than 96% of the world’s oceans, with similar warming rates along the northwest Atlantic shelf (A. Pershing et al. 2018). A punctuated elevation in temperatures over the last decade are believed to be the result of a shift in Gulf Stream positioning. A Northward shift in the Gulf stream has increased the regional temperatures via an increased direct transport of warm gulf stream water into areas like the Gulf of Maine . The Gulf stream has also been producing a higher frequency of warm core rings, and has obstructed some of the cold-water Scotian Shelf current flow that would otherwise counter the influence of the Gulf Stream on the region’s temperatures (Gangopadhyay et al. 2019; University of South Carolina et al. 2021). The combination of these oceanographic changes has led to a warmer continental shelf habitat.

Purpose

We estimated size spectrum relationships for the groundfish populations for each sub-region of the Northeast US continental shelf. In the case of the NW Atlantic: sustained increases in temperature should have a physiological impact on the community size structure.

This leads to our second hypothesis:

H2. Warming alters the community through the direct influence of temperature on metabolism, growth, and population productivity.

Methods

Groundfish Data

Code
# 1. Biological data used as input
withr::with_dir(rprojroot::find_root('_targets.R'), 
                tar_load(nefsc_1g_labelled))   

# rename and format
nefsc_size_bins <- nefsc_1g_labelled

n_species <- length(unique(nefsc_size_bins$comname))

Fishery Independent data on was collected as part of the NEFSC’s northeast trawl survey. This survey is conducted each year in the spring and in the fall, with sample locations determined following a stratified-random survey design with effort allocated in proportion to stratum area. Analyses using the trawl survey data took used data from both the Spring and Fall survey seasons covering all years from 1970 to 2019. Correction factors were applied to total species abundance and biomass to account for changes in vessels, gear, and doors when appropriate as part of the survey program. However, abundance and biomass by length is not corrected. To account for this, abundance at length for each species were adjusted to match the correction factors applied to total species abundance at each station, with allocation following the distributions of length caught at that station. Such that for each species: the sum of adjusted abundances for each length class is equal to the gross abundance as corrected for changes in vessels, gear, etc. To account for differences in sampling effort among survey strata, all corrected abundance-at-length data was area-stratified.

Code
# Get region polygons:

# Get the paths to the shapefiles used to mask
trawl_paths <- gmRi::get_timeseries_paths(region_group = "nmfs_trawl_regions", mac_os = "mojave")

# Polygons for each region
all_poly <- read_sf(trawl_paths[["inuse_strata"]][["shape_path"]]) 

  
ggplot() +
  geom_sf(data = us_poly) +
  geom_sf(data = canada) +
  geom_sf(data = all_poly, aes(fill = survey_area), alpha = 0.8) +
  coord_sf(xlim = c(-76.4, -64.4), ylim = c(35, 45.5), expand = F) +
  scale_fill_gmri() +
  theme_bw() +
  map_theme(legend.position = "bottom", 
            legend.background = element_rect(fill = "white")) +
  guides(fill = guide_legend(title = "", nrow = 2))

Data from the survey was grouped by strata to form geographically meaningful sub-regions: Gulf of Maine, Georges Bank, Southern New England, Mid-Atlantic Bight. For each region, we developed several time series indicators:

  1. Community Composition metrics (abundance and biomass by functional group, with body-size contributions)

  2. Mean size of the aggregate community and key functional groups

  3. Slope and intercept of the size spectrum

Community Composition

Functional groups were assigned to each species based on life history and geography. Functional groups included were elasmobranch, pelagic, demersal, and groundfish species. Stratified annual abundance and biomass totals were calculated for each functional group and each region with labels for increasing body-size (biomass kg) groups.

Code
# make a column that contains all data
nefsc_size_bins <- nefsc_size_bins %>% 
  mutate(group_col = "All Data") 

# Do some grouping by year survey area and functional group
fgroup_area <- get_group_summaries(Year, survey_area, spec_class)

Size Spectrum Analysis

Community size spectra were estimated using abundance-at-length data from 68 species. These species were selected based on the availability of published weight-at-length relationships (Wigley et al. 2003) and represented 98.98% of the total biomass caught in the survey. Published length-weight relationships were used to convert abundance at length data into their corresponding biomass at length (kg). These values were then used to get totals for stratified weight-at-length, in complement to the corrected abundances-at-length data which had been area stratified. These area-stratified biomass at length totals were then used for fitting each regional biomass size spectra.

To fit the normalized biomass size spectra, stratified biomass at length data was binned into logartithmically equal spaced intervals (0.5 on a \(log_{10}\) scale), summing bodymass across all species within each body size bin. To normalize the spectra, the atratified abundances within each bin was then divided by the bin-width to account for the increasing bin-widths, a consequence of the log scale. Normalized size spectra were fit for each year and for each region independently, and for each year across all strata, using ordinary least squares (ols) regressions for stratified abundance (normalized) by body-size bins.

Code
withr::with_dir(rprojroot::find_root('_targets.R'), 
                tar_load(size_spectrum_indices))   


# Grab SS Groups we care about
region_indices <- size_spectrum_indices  %>% 
  filter(`group ID` == "single years * region") %>% 
  mutate(yr = as.numeric(as.character(Year)),
         survey_area = factor(survey_area, levels = c("GoM", "GB", "SNE", "MAB")),
         sig_fit = ifelse(l10_sig_strat < 0.05, "Significant", "Non-Significant"))

Temperature Data

Global Sea surface temperature data was obtained via NOAA’s optimally interpolated SST analysis (OISSTv2), providing daily temperature values at a 0.25° latitude x 0.25° longitude resolution (Reynolds et al. 2007). A daily climatology for every 0.25° pixel in the global data set was created using average daily temperatures spanning the period of 1982-2011. Daily anomalies were then computed as the difference between observed temperatures and the daily climatological average. OISSTv2 data used in these analyses were provided by the NOAA PSL, Boulder, Colorado, USA from their website at https://psl.noaa.gov.

Temperature data was regionally averaged to match the survey regions from the age-at-length data. SST anomalies were averaged by year for each region and over the entire sampling region to produce daily time series. These time series were then processed into annual timeseries of surface temperatures and anomalies. All region-averaging was done with area-weighting of the latitude/longitude grid cells to account for differences in cell-size in of the OISSTv2 data.

Code
# Load the regional temperatures from {targets}
withr::with_dir(rprojroot::find_root('_targets.R'), 
                tar_load(regional_oisst))

Spectra Drivers

The impact of external factors on the changes in size spectra was compared against several hypothesized driving forces. External factors proposed as potential drivers included sea surface temperature anomalies, state and federal fisheries landings from the Greater Atlantic Regional Fisheries Office (GARFO), the North Atlantic Oscillation (NAO), and zooplankton community indices from the continuous plankton recorder (CPR) dataset.

Code
#### 1. GARFO Landings  ####

# Load the GARFO landings data:
res_path <- gmRi::cs_path("res")

# Landings of finfish* sheet 5
landings <- read_xlsx(
  path = str_c(res_path, "GARFO_landings/KMills_landings by area 1964-2021_JUN 2022.xlsx"), sheet = 5) %>% 
  rename_all(tolower)


# Shapefiles for the fisheries stat zones
stat_zones <- read_sf(str_c(res_path, "Shapefiles/Statistical_Areas/Statistical_Areas_2010_withNames.shp"))


# Make a list of zones to roughly match the survey areas:
fish_zones <- list(
  "Gulf of Maine" = c(511:515, 464, 465),
  "Georges Bank" = c(521, 522, 525, 561, 562),
  "Southern New England" = c(611, 612, 613, 616, 526, 537, 538, 539),
  "Mid-Atlantic Bight" = c(614:615, 621, 622, 625, 626, 631, 632))


# Trim out what we don't need and label them
stat_zones <- stat_zones %>% 
  mutate(
    survey_area = case_when(
      Id %in% fish_zones$"Gulf of Maine" ~ "Gulf of Maine",
      Id %in% fish_zones$"Georges Bank" ~ "Georges Bank",
      Id %in% fish_zones$"Southern New England" ~ "Southern New England",
      Id %in% fish_zones$"Mid-Atlantic Bight" ~ "Mid-Atlantic Bight")) %>% 
  filter(survey_area %in% c(
    "Georges Bank", "Gulf of Maine", "Southern New England", "Mid-Atlantic Bight"))
  

# # Map it out? - takes forever from Chesapeake bay

# ggplot(st_simplify(stat_zones)) +
#   geom_sf(aes(fill = survey_area)) +
#   scale_fill_gmri() +
#   map_theme()


# Add the labels into the landings data and remove what we don't need there:
landings <- landings %>% 
  mutate(
    survey_area = case_when(
      `stat area` %in% fish_zones$"Gulf of Maine" ~ "Gulf of Maine",
      `stat area` %in% fish_zones$"Georges Bank" ~ "Georges Bank",
      `stat area` %in% fish_zones$"Southern New England" ~ "Southern New England",
      `stat area` %in% fish_zones$"Mid-Atlantic Bight" ~ "Mid-Atlantic Bight")) %>% 
  filter(survey_area %in% c("Georges Bank", "Gulf of Maine", "Southern New England", "Mid-Atlantic Bight")) %>% 
  mutate(survey_area = factor(survey_area, levels = c(
    "Gulf of Maine", "Georges Bank", "Southern New England", "Mid-Atlantic Bight"
  )))



# Get Summaries
landings_summ <- landings %>% 
  drop_na() %>% 
  rename(
    "weight_lb" = `landed lbs`,
    "live_lb" = `live lbs`) %>% 
  drop_na() %>% 
  group_by(year, survey_area) %>% 
  summarise( 
    across(
      .cols = c(value, weight_lb, live_lb), 
      .fns = list(mean = mean, 
                  total = sum), 
      .names = "{.fn}_{.col}"), 
    .groups = "drop")  


# Scale the landings to create an index by area
landings_summ <- landings_summ %>% 
  group_by(survey_area) %>% 
  mutate(total_wt_z = base::scale(total_weight_lb)) %>% 
  ungroup()



####  2. Climate Drivers  ####

# From ecodata:

####  NAO   & GSI
nao <- ecodata::nao %>% 
    mutate(year = Time,
           Time = as.Date(str_c(Time, "-01-01")))

gsi <- ecodata::gsi %>% 
  mutate(
    Time = str_pad(as.character(Time), width = 7, side = "right", pad = "0"),
    year = as.numeric(str_sub(Time, 1, 4)),
    month = str_sub(Time, -2, -1),
    Time = as.Date(str_c(year, month, "01", sep = "-")))


# Join them up
clim_drivers <- bind_rows(list(nao, gsi)) %>% 
  filter(EPU == "All")
  




####  3. CPR Indices  ####

# From CPR Analysis:
# Uses 7 focal taxa, 2 calanus stages
cpr_indices <- read_csv("~/Documents/Repositories/continuous_plankton_recorder/results_data/cpr_focal_pca_timeseries_period_1961-2017.csv")


# Do some Reshaping for the Plot
cpr_indices <- cpr_indices %>% 
  select(c(year, 2:3)) %>% 
  rename(
    `Principal Component 1` = "First Mode",
    `Principal Component 2` = "Second Mode") %>% 
  pivot_longer(names_to = "pca_mode", values_to = "pca_loading", cols = c(2:3)) 

Results

Abundance Distribution

Code
# panel plot the biomass by body size
fgroup_area$weight_bins %>% 
  mutate(strat_abund_mill = wtbin_strat_abund / 1e6) %>% 
ggplot(aes(Year, strat_abund_mill, fill = weight_bin)) +
  geom_col(position = "stack", color = "gray80", size = 0.1) +
  facet_grid(survey_area~spec_class) +
  scale_fill_gmri() +
  scale_y_continuous(labels = comma_format()) +
  labs(y = "Stratified Total Abundance (millions)",  
       title = "Abundance Allocation by Weight",
       x = "", 
       fill = "Individual Weight (kg)") +
  theme(legend.position = "bottom",
        axis.text.x = element_text(angle = 45, hjust = 1))

Biomass Distribution

Overall biomass was highest in the two northern regions, the Gulf of Maine and Georges Bank. Roughly half of the biomass sampled in these regions can be attributed to groundfish/demersal species, with the second largest contributions coming from elasmobranchs. Groundfish biomass, larger individuals >2kg in particular, declined during the 70’s and 80’s in these regions, never truly recovering. Beginning in the 2000’s there were signs that groundfish abundances were increasing as evidenced by increasing numbers of smaller individuals, however in both regions this trend appears to have reversed by the mid 2010’s. Elasmobranch populations increased steadily throughout the survey time period across all regions, but for southern New England where they were more flat but with high/low periods. Larger elasmobranch were rare in all regions except for a period spanning the late 70’s through the early 90’s isolated to Georges Bank. Demersal species biomass was highest in the Gulf of Maine, dwarfing their contributions in other regions. Their biomass declined in the 70’s, was flat until the late 90’s, remaining relatively high until declining in the late 2010’s. Pelagic species biomass was low in all regions, and is unlikely to be representative of true biomass trends due to gear selectivity.

Code
# panel plot the biomass by body size
fgroup_area$weight_bins %>% 
  mutate(strat_lwbio_mill = wtbin_strat_lw_bio / 1e6) %>% 
ggplot(aes(Year, strat_lwbio_mill, fill = weight_bin)) +
  geom_col(position = "stack", color = "gray80", size = 0.1) +
  facet_grid(survey_area~spec_class) +
  scale_fill_gmri() +
  scale_y_continuous(labels = comma_format()) +
  labs(y = "Stratified Total Biomass (million kg)",  
       title = "Biomass Allocation by Weight",
       x = "", 
       fill = "Individual Weight (kg)") +
  theme(legend.position = "bottom",
        axis.text.x = element_text(angle = 45, hjust = 1))

Regional Variation in Species Composition

There was a distinct difference between Northern and Southern regions in the way biomass was distributed among the different functional groups. The primary contributors to overall biomass in the southern regions (southern New England & mid-Atlantic bight) was the elasmobranch community. While the northern regions (Gulf of Maine & Georges Bank) each had similar quantities of elasmobranch biomasses, there was also a comparable contribution of groundfish and demersal species as well.

Regional Size Spectra

Size spectrum slopes were least steep in the two Northern regions.

  • Steepening of northern slopes

  • lack of bounce-back

  • all slopes similar steepness

Code
# Plot the Regional Slopes
slope_timeline <- ggplot(region_indices, 
                         aes(yr, l10_slope_strat, group = survey_area)) +
  geom_line(linetype = 1) +
  geom_point() +
  scale_color_gmri() +
  facet_wrap(~survey_area, ncol = 1) +
  # geom_smooth(method = "lm", formula = y~x, alpha = 0.75) +
  labs(x = "Year", y = "Slope", title = "Normalized Biomass Spectra") 

# Plot the Regional Intercepts
int_timeline <- ggplot(region_indices, aes(yr, l10_int_strat, group = survey_area)) +
  geom_line(linetype = 1) +
  geom_point() +
  facet_wrap(~survey_area, ncol = 1) +
  # geom_smooth(method = "lm", formula = y~x, alpha = 0.75) +
  labs(x = "Year", y = "Intercept") 


# Assemble
slope_timeline | int_timeline 

Size Spectra Drivers

Discussion

The data we rely on in this analysis was collected as part of a survey program which began out of concern that fisheries were already being over-harvested. Estimates by scientists at that time suggested that by the 1970’s total biomass of Georges Bank had been halved and elasmobranchs had begun to replace the over-exploited gadoid(Fogarty and Murawski 1998). The implication of such a large disturbance that pre-dates our time series is that the steepening of size spectrum slope we observed in this area and the adjacent Gulf of Maine are the tail-ends of a longer and more severe decline. While metrics of overall fishing pressure is hard to align exactly with trawl survey coverage, historic and anecdotal evidence show that groundfish fishing pressures are a fraction of their historic pressure was in the 1960’s and 1970’s. This begs the question of why larger adult numbers never began to recover in these regions. Looking at abundance and biomass information from the survey there was evidence of strong recruitment among smaller individuals < 1kg, but there has since not been any sizable population of fishes larger than 1kg outside of elasmobranchs. Work by (A. J. Pershing et al. 2015) suggests that part of the failure in recovery was due to an inability to account for temperature change in fisheries management. At this point in time the regional temperatures had just begun to reflect a regime shift, and could have been considered at that time an acute stressor. Since then the region has experienced nearly a decade of sustained above-average temperatures, and there are signs that the success seen in recruitment and survival of even the smaller size classes is declining.

Potential Drivers:

Code
# Plot the timelines
temp_regimes %>% 
  #filter(survey_area == "Full Region") %>% 
  ggplot( aes(yr, sst_anom)) +
  #geom_col(aes(fill = regime),  size = 0.75, alpha = 0.8) +
  geom_hline(yintercept = 0, color = gmri_cols("orange"), size = 1, lty = 2) +
  geom_line(size = 0.75, alpha = 0.8) +
  scale_x_continuous(expand = expansion(add = c(0.25,0.25))) +
  scale_y_continuous(labels = number_format(suffix = " \u00b0C")) +
  facet_wrap(~survey_area, ncol = 1) +
  guides(fill = "none") +
  theme(
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.background = element_rect(fill = "transparent"),
    legend.key = element_rect(fill = "transparent", color = "transparent")) + 
  labs(
    title = "NW-Atlantic Regional SST Anomalies",
    x = "", 
    y = "Surface Temperature Anomaly",
    caption = "Anomalies calculated using 1982-2011 reference period.") +
  guides(label = "none",
         color = guide_legend(keyheight = unit(0.5, "cm")))

Code
####  Landings  ####
landings_summ %>% 
  ggplot(aes(year, total_wt_z, group = survey_area)) +
  geom_hline(yintercept = 0, color = gmri_cols("orange"), size = 1, lty = 2) +
  geom_line() +
  facet_wrap(~survey_area, ncol = 1) +
  #scale_y_continuous(labels = scales::comma_format()) +
  scale_x_continuous(breaks = seq(1950, 2030, by = 10)) +
  labs(x = "Year", y = "Finfish Landings Index (z)",
       title = "GARFO Finfish Landings")

Code
####  Climate Drivers  ####

ggplot(clim_drivers, aes(Time, Value, group = Var)) +
  geom_hline(yintercept = 0, color = gmri_cols("orange"), size = 1, lty = 2) +
  geom_line() +
  facet_wrap(~Var, ncol = 1) +
  scale_y_continuous(labels = scales::comma_format()) +
  scale_x_date(limits = as.Date(c("1965-01-01", "2020-12-31")),
               breaks = scales::breaks_pretty(n = 6)) +
  labs(x = "Year", y = "Total Finfish Landings (lb.)",
       title = "Environmental Drivers")

Code
#### CPR Community  ####

# CPR Plot
cpr_indices %>% 
  ggplot(aes(year, pca_loading, group = pca_mode)) +
  geom_hline(yintercept = 0, color = gmri_cols("orange"), size = 1, lty = 2) +
  geom_line() +
  facet_wrap(~pca_mode, ncol = 1) +
  scale_x_continuous(breaks = seq(1950, 2030, by = 10)) +
  labs(x = "Year", y = "PCA Loading", title = "Gulf of Maine CPR PCA")

All Correlations Matrix

Code
# table to join for swapping shorthand for long-hand names
area_df <- data.frame(area = c("Gulf of Maine", "Georges Bank", "Southern New England", "Mid-Atlantic Bight", "All"),
                      survey_area = c("GoM", "GB", "SNE", "MAB", "Full Region"))


# Common form for all:
# year, area, var, value

# Put climate drivers on annual schedule
clim_idx <- clim_drivers %>% 
  group_by(year, area = EPU, var = Var) %>% 
  summarise(value = mean(Value, na.rm = T),
            .groups = "drop")


# landings
landings_idx <- landings_summ %>% 
  group_by(year, area = survey_area) %>% 
  summarise(value = mean(total_wt_z, na.rm = T),
            .groups = "drop") %>% 
  mutate(var = "landings")


# Zooplankton
cpr_idx <- cpr_indices %>% 
  mutate(area = "Gulf of Maine",
         var = str_c("cpr_pca_", str_sub(pca_mode, -1, -1))) %>% 
  group_by(year, area, var) %>% 
  summarise(value = mean(pca_loading),
            .groups = "drop")


# Temperaature
sst_idx <- temp_regimes %>% 
  left_join(area_df) %>% 
  select(year = yr, area, value = sst_anom) %>% 
  mutate(var = "sst_anom")


# Size Spectrum Slopes & Intercepts
ss_idx <- region_indices %>% 
  select(year = Year, survey_area, spectra_slope = l10_slope_strat, spectra_int = l10_int_strat) %>% 
  pivot_longer(cols = c(spectra_slope, spectra_int), names_to = "var", values_to = "value") %>% 
  mutate(year = as.numeric(year)) %>% 
  left_join(area_df) %>% 
  select(-survey_area)



# All drivers
all_drivers <- bind_rows(
  list(
    clim_idx,
    landings_idx,
    cpr_idx,
    sst_idx,
    ss_idx
  )
)




# Do some reshaping:
driver_matrix <- all_drivers %>% 
  mutate(id = str_replace_all(str_c(area, "_", var), " ", "_")) %>% 
  select(-c(area, var)) %>% 
  pivot_wider(names_from = id, values_from = value) %>% 
  drop_na() %>% 
  column_to_rownames(var = "year")
  


# Correlation Plot
rho <- cor(driver_matrix)
corrplot(rho,
         method="ellipse",
         type="lower",
         order = "hclust",
         tl.col = "black",
         tl.srt = 0,
         tl.cex = 0.6,
         tl.offset = 0.7,
         cl.cex = 0.8,
         cl.offset = 0.9,
         cl.ratio = 0.1,
         title = "All Year Correlation Matrix")

Code
# GGplot correlation Matrix data
gg_rho <- as.data.frame(rho) %>% 
  rownames_to_column(var = "xvar") %>% 
  pivot_longer(cols = -xvar, names_to = "yvar", values_to = "r2")
Code
gg_rho %>% 
  mutate(
    xvar = str_replace(xvar, "_", " "),
    yvar = str_replace(yvar, "_", " ")) %>% 
  ggplot(aes(yvar, xvar, fill = r2)) +
    geom_tile() +
    scale_fill_distiller(palette = "RdBu", 
                         limits = c(-1, 1), 
                         breaks = c(-1,0,1)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1),
        strip.text.y = element_text(angle = 0),
        legend.position = "bottom") +
  labs(x = "With these Other Indices (y)", y = "Correlation of These Indices (x)",
       fill = "Correlation Coefficient",
       title = "Correlation Matrix of All Drivers & Response")
Code
# Tidy it up, enhance the labels
gg_rho_tidy <- gg_rho %>% 
  mutate(
    response_var = ifelse(str_detect(xvar, "slope|int"), T, F),
    driver_var = ifelse(str_detect(yvar, "osc|pca|landings|index|anom"), T, F),
    area = case_when(
      str_detect(xvar, "Georges") ~ "Georges Bank",
      str_detect(xvar, "Gulf") ~ "Gulf of Maine",
      str_detect(xvar, "Southern") ~ "Southern New England",
      str_detect(xvar, "Mid-Atlantic") ~ "Mid-Atlantic Bight"),
    area = factor(area, levels = c("Gulf of Maine", "Georges Bank", "Southern New England", "Mid-Atlantic Bight")),
    driver_type = ifelse(str_detect(yvar, "landings"), 
                         "Fishing", "Environmental"),
    x_short = case_when(
      str_detect(xvar, "slope") ~ "Spectra Slope",
      str_detect(xvar, "int") ~ "Spectra Intercept"))


# Do some filtering and string formatting:
only_driver_response <- gg_rho_tidy %>% 
  filter( 
    response_var,
    driver_var) %>% 
  mutate(
    yvar = str_replace_all(yvar, "_", " "),
    yvar = factor(yvar, levels = c(
      "Gulf of Maine cpr pca 1",
      "Gulf of Maine cpr pca 2","All gulf stream index",
      "All north atlantic oscillation",
      "All sst anom",
      "Gulf of Maine sst anom",
      "Georges Bank sst anom", 
      "Southern New England sst anom",
      "Mid-Atlantic Bight sst anom",
      "Gulf of Maine landings",
      "Georges Bank landings",
      "Southern New England landings",
      "Mid-Atlantic Bight landings"
    ))) 


# Plot the convoluted thing:
only_driver_response %>% 
  ggplot(aes(yvar, x_short, fill = r2)) +
  geom_tile() +
  facet_grid(area~driver_type, scales = "free_x", space = "free") +
  scale_fill_distiller(palette = "RdBu", limits = c(-1, 1), breaks = c(-1,0,1)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1),
        strip.text.y = element_text(angle = 0),
        legend.position = "bottom",
        legend.title = element_text(vjust = 0.75)) +
  labs(x = "Driver", y = "Bodymass Spectra Coefficient",
       fill = "Correlation Coefficient",
       title = "Correlation Between Size Spectra Response and Drivers",
       subtitle = "Correlation for Concurrent Years")

References

Bianchi, G., H. Gislason, K. Graham, L. Hill, X. Jin, K. Koranteng, S. Manickchand-Heileman, et al. 2000. “Impact of Fishing on Size Composition and Diversity of Demersal Fish Communities.” ICES Journal of Marine Science 57 (3): 558–71. https://doi.org/10.1006/jmsc.2000.0727.
Boudreau, P. R., and L. M. Dickie. 1992. “Biomass Spectra of Aquatic Ecosystems in Relation to Fisheries Yield.” Canadian Journal of Fisheries and Aquatic Sciences 49 (8): 1528–38. https://doi.org/10.1139/f92-169.
Daan, Niels, Henrik Gislason, John G. Pope, and Jake C. Rice. 2005. “Changes in the North Sea Fish Community: Evidence of Indirect Effects of Fishing?” ICES Journal of Marine Science 62 (2): 177–88. https://doi.org/10.1016/j.icesjms.2004.08.020.
Fogarty, Michael J., and Steven A. Murawski. 1998. “Large-Scale Disturbance and the Structure of Marine Systems: Fishery Impacts on Georges Bank.” Ecological Applications 8 (sp1): S6–22. https://doi.org/10.1890/1051-0761(1998)8[S6:LDATSO]2.0.CO;2.
Gangopadhyay, Avijit, Glen Gawarkiewicz, E. Nishchitha S. Silva, M. Monim, and Jenifer Clark. 2019. “An Observed Regime Shift in the Formation of Warm Core Rings from the Gulf Stream.” Scientific Reports 9 (1): 12319. https://doi.org/10.1038/s41598-019-48661-9.
Guiet, Jérôme, Jean-Christophe Poggiale, and Olivier Maury. 2016. “Modelling the Community Size-Spectrum: Recent Developments and New Directions.” Ecological Modelling 337 (October): 4–14. https://doi.org/10.1016/j.ecolmodel.2016.05.015.
Kleisner, Kristin M., Michael J. Fogarty, Sally McGee, Jonathan A. Hare, Skye Moret, Charles T. Perretti, and Vincent S. Saba. 2017. “Marine Species Distribution Shifts on the U.S. Northeast Continental Shelf Under Continued Ocean Warming.” Progress in Oceanography 153 (April): 24–36. https://doi.org/10.1016/j.pocean.2017.04.001.
Miller, Timothy J., Loretta O’Brien, and Paula S. Fratantoni. 2018. “Temporal and Environmental Variation in Growth and Maturity and Effects on Management Reference Points of Georges Bank Atlantic Cod.” Canadian Journal of Fisheries and Aquatic Sciences 75 (12): 2159–71. https://doi.org/10.1139/cjfas-2017-0124.
Nye, Ja, Js Link, Ja Hare, and Wj Overholtz. 2009. “Changing Spatial Distribution of Fish Stocks in Relation to Climate and Population Size on the Northeast United States Continental Shelf.” Marine Ecology Progress Series 393 (October): 111–29. https://doi.org/10.3354/meps08220.
Perretti, Ct, Mj Fogarty, Kd Friedland, Ja Hare, Sm Lucey, Rs McBride, Tj Miller, et al. 2017. “Regime Shifts in Fish Recruitment on the Northeast US Continental Shelf.” Marine Ecology Progress Series 574 (July): 1–11. https://doi.org/10.3354/meps12183.
Pershing, Andrew J., Michael A. Alexander, Christina M. Hernandez, Lisa A. Kerr, Arnault Le Bris, Katherine E. Mills, Janet A. Nye, et al. 2015. “Slow Adaptation in the Face of Rapid Warming Leads to Collapse of the Gulf of Maine Cod Fishery.” Science 350 (6262): 809–12. https://doi.org/10.1126/science.aac9819.
Pershing, Andrew, Katherine Mills, Alexa Dayton, Bradley Franklin, and Brian Kennedy. 2018. “Evidence for Adaptation from the 2016 Marine Heatwave in the Northwest Atlantic Ocean.” Oceanography 31 (2). https://doi.org/10.5670/oceanog.2018.213.
Pinsky, Malin L., Boris Worm, Michael J. Fogarty, Jorge L. Sarmiento, and Simon A. Levin. 2013. “Marine Taxa Track Local Climate Velocities.” Science 341 (6151): 1239–42. https://doi.org/10.1126/science.1239352.
Rossberg, Axel G. 2012. “6 - A Complete Analytic Theory for Structure and Dynamics of Populations and Communities Spanning Wide Ranges in Body Size.” In, edited by Ute Jacob and Guy Woodward, 46:427–521. Global Change in Multispecies Systems Part 1. Academic Press. https://doi.org/10.1016/B978-0-12-396992-7.00008-3.
Shin, Yunne-Jai, Marie-Joëlle Rochet, Simon Jennings, John G. Field, and Henrik Gislason. 2005. “Using Size-Based Indicators to Evaluate the Ecosystem Effects of Fishing.” ICES Journal of Marine Science 62 (3): 384–96. https://doi.org/10.1016/j.icesjms.2005.01.004.
Staudinger, Michelle D., Katherine E. Mills, Karen Stamieszkin, Nicholas R. Record, Christine A. Hudak, Andrew Allyn, Antony Diamond, et al. 2019. “Its about Time: A Synthesis of Changing Phenology in the Gulf of Maine Ecosystem.” Fisheries Oceanography 28 (5): 532–66. https://doi.org/10.1111/fog.12429.
University of South Carolina, Erin Meyer-Gutbrod, Charles Greene, Kimberley Davies, and David Johns. 2021. “Ocean Regime Shift Is Driving Collapse of the North Atlantic Right Whale Population.” Oceanography 34 (3): 22–31. https://doi.org/10.5670/oceanog.2021.308.